#@Time : 2021/10/2519:53
#@Author : xujian
#这里所说的均值是指
        # 在一行中，除去non外其他数的均值
        # 在一列中，除去non外其他数的均值
# 首先我们创建一个数组
import numpy as np


#我计划将每一行的均值来替代nan
# 首先我们遍历每一行
def lie(array):
    array1=np.copy(array)
    for i in range(array1.shape[1]):
        # i是第几行的索引
        temp=array1[:,i]
        # print(temp)
        count_nan=np.count_nonzero(temp!=temp)
        # print(count_nan)
        if count_nan!=0 :
        #     #由于count_nan不等于0说明有nan，我们将这行的其他数跳出来计算代替他
        #     #(注意将其他数取出来，不要纠结去得到nan的位置)
            array2=temp[temp==temp]
            # print(array2)
            temp[temp!=temp]=array2.mean()
    return array1

def hang(array1):
    array=np.copy(array1)
    #遍历找到包括nan的行
    for i in range(array.shape[0]):
        temp=array[i,:]
                # i是行的索引
        coun_nan=np.count_nonzero(temp!=temp)
        if coun_nan!=0 :
                    #说明存在nan
                    #我们把这一行中不是nan的跳出来
                    #注意这里如果没有将array1[i,:]付给一个变量，下面这句话必须是在array1[i,:]的基础上进行的筛选
            array2=temp[[temp==temp]]
                # print(array2)
            temp[temp!=temp]=array2.mean()
            # print(array2.mean())
    return array

if __name__=='__main__':
    array= np.arange(20).reshape(4, 5).astype('float')
    # print(array1)
    # w我们设置一些值为non
    array[(1, 2), 2] = np.nan
    print(array)
    print('*'*10)


    #注意lie函数与hang函数是修改了原数组了，所以不要让两句执行语句冲突
    #为了不让原数组改变，可以改变函数  利用nupmy的copy方法.
    print(lie(array))

    print('*'*10)
    print(hang(array))
































